package com.itheima.tlias.mapper.sql;

import com.itheima.tlias.model.entity.Dept;
import org.apache.ibatis.jdbc.SQL;
import org.springframework.util.ObjectUtils;

/**
 * @author Lee
 * @created 2024/4/7
 * @describtion
 */
public class DeptMapperSqlProvider {
    /**
     * 部门的字段名
     */
    public static final String COMMON_COLUMN = "id,name,create_time,update_time";
    /**
     * 表名
     */
    public static final String TABLE_NAME = "dept";

    /**
     * 根据部门id更新部门信息
     *
     * @param dept 部门
     * @return SQL
     */

    public String updateById(Dept dept) {
        SQL sql = new SQL().UPDATE(TABLE_NAME);
        if (!ObjectUtils.isEmpty(dept.getName())) {
            sql.SET("name = #{name}");
        }
        if (!ObjectUtils.isEmpty(dept.getCreateTime())) {
            sql.SET("create_time = #{createTime}");
        }
        if (!ObjectUtils.isEmpty(dept.getUpdateTime())) {
            sql.SET("update_time = #{updateTime}");
        }
        sql.WHERE("id = #{id}");
        return sql.toString();

    }

    /**
     * 给DeptMapper 接口中 selectById 方法提供SQL 语句
     *
     * @param id 部门id
     * @return SQL  // select * from dept where id = ？
     */
    public String selectById(Integer id) {
        return new SQL().SELECT(COMMON_COLUMN)
                .FROM(TABLE_NAME)
                .WHERE("id=#{id}")
                .toString();
    }

    /**
     * 给DeptMapper 接口中 insertDept 方法提供SQL 语句
     *
     * @param dept 部门
     * @return SQL
     */
    public String inserDept(Dept dept) {
        SQL sql = new SQL().INSERT_INTO(TABLE_NAME);
        if (!ObjectUtils.isEmpty(dept.getName())) {
            sql.INTO_COLUMNS("name");
            sql.INTO_VALUES("#{name}");
        }
        if (!ObjectUtils.isEmpty(dept.getCreateTime())) {
            sql.INTO_COLUMNS("create_time");
            sql.INTO_VALUES("#{createTime}");
        }
        if (!ObjectUtils.isEmpty(dept.getUpdateTime())) {
            sql.INTO_COLUMNS("update_time");
            sql.INTO_VALUES("#{updateTime}");
        }
        return sql.toString();
    }

    /**
     * 给DeptMapper接口中deleteById方法提供Sql语句
     *
     * @param id 获取部门id
     * @return
     */
    public String deleteById(Integer id) {

        return new SQL().DELETE_FROM(TABLE_NAME)
                .WHERE("id = #{id}")
                .toString();
    }

    /**
     * 给DeptMapper 接口中 selectDepts 方法提供SQL 语句
     *
     * @return 生成SQL
     */
    public String selectDepts() {
        return new SQL()
                .SELECT(COMMON_COLUMN)
                .FROM(TABLE_NAME).toString();
    }
}
